2.2.3 ===============================================================================
- Fixed a bug in processRichItemObject within RelatedParser.
- Add MEDIA_CONNECT_FRONTEND as a YTIAPI Client Type.
- Fixed the ANDROID backend not functioning due to YouTube being more annoying.
- More fixes to the Channel extractor.
- Minor fix to the Trending extractor.
- Fixed like count extraction.
- Improved the PO-token generation algorithm to generate less errors.
- Improved the "ytInitialData" extraction algorithm.
2.2.2 ===============================================================================
- Add YTRequestObject to create a global request object to de-duplicate code.
- Use YTRequestObject::makeYTRequestObject in YTE instead of local copies or YouTubeExtractorUtil's makeYTRequestObject
- Fix videos on the ANDROID backend throwing 403 errors.
	Credit: https://github.com/TeamNewPipe/NewPipeExtractor/pull/1084
- YTE now spoofs a newer version of the Android YouTube clients.
- YTE now spoofs a newer version of the iOS YouTube clients.
- Fix YouTube's consent prompt breaking things.
- Fixed the v8 cipher failing at object variables names above two letters.
- [related] Prep. work for YouTube fucking up the related section again.
- [playlists] Remove playlist index correction.
- [Extractor] updateESD now returns an instance of itself.
- [signatures] v9: Rhino now uses a improved multi-threaded mode by default.
- Updated the versions for NFEE and NFEE-rolling.
- [NFEE-MT] Marked for removal.
	This extractor has zero purpose since NFEE is already built upon a threaded architecture.
	Planned removal for 2.3.
- Improved the heatmap extraction logic.
- Hooked up heatmap extraction to NFEE and NFEE-rolling.
- YouTubeVideo: Fixed enableBackendRandomization not applying the correct DFS fix parameter.
- Moved DFS processing into extractors.
	MAP_TYPE_DISABLE_V9_DECIPHERING will continue to be respected by extractors.
- Added some random variance to the v8 and v9 extractor refresh interval.
- Fixed the Channel Extractor breaking due to an upcoming API change.
- Changed the Channel extractor API.
	Channel banners and avatars are now in a List<Thumbnail> object.
	
	You can access them by calling getBanners and getAvatars respectfully.
2.2.1 ===============================================================================
- [nfee] Sync with rolling release version.
- [nfee,nfee-rolling] Fix age-gate fallback not working.
- [nfee-rolling] Enable ECD by default.
- [metadata] Support for HQ2 images.
	1. WebP, I have nothing more to add.
	2. This change mixes around the level numbers, you might have some explosions.
- [playlist,channel-playlist] Add continuation support.
- [channel] Add support for extracting shorts and livestreams from channels.
- [ecd] Added support for more codecs.
- [formats] Added 1080p Premium and some missing formats.
- [constants] Add and use visitorData.
	1. This is an experiment, I am suspecting some throttling (for non-visitorData requests) is being done.
	2. You can always use a fake ID.
- [formats] Preparations for AOM AV2.
	This is based upon a random gut feeling.
	AOM AV2's specification isn't finalized as of writing this so I have no clue if:
	1. YouTube adopts it ever.
	2. Anyone uses it over AV1.
	Fingers crossed.
- [dfs] Removed the Lua-based backend.
	This no longer functions and isn't fun to try and jerry-rig into working again, the
	 Rhino backend is sufficient for now.
- [signatures] Removed the Lua-based backend.
- [nfee-rolling,ytiapi-rolling] Add a workaround for livestreams.
 Some livestreams claim to be live even if it's obvious that it's a DVR.
- Code cleanup.
- [comments] Added isHearted() API.
- [channels] Passthrough the clickTrackingParams into contiunation requests.
  This is optional, providing a null parameter will use the old randomly generated logic.
- [util] Improve YouTube browse API spoofing.
- [channels] Fix continuation requests not working.
- [comments] Use makeYTRequestObject().
- Added ABI 6080: Video Projection Types
2.2 =================================================================================
!!!
	This release contains API breaking changes!
	
	The following classes are affected:
		- YoutubeMetadata has been moved into the metadata package and renamed to YouTubeMetadata.
		- YoutubeCaptions has been moved into the subtitles package and renamed into YouTubeCaptions.
		- Playlist has been moved into the playlist package.
		- YoutubeVideo has been moved into the video package and renamed into YouTubeVideo.
		- ExtractedVideo and ExtractionResult has been moved into the video package.
!!!
- [embed-next, gvi, nfee, nfee-mt, official, invidious, ytapi] Updated to ABI 2.2.
- [extractors] Require and bump to ABI 2.2.
- [extractors] Mark ABI <2.2 as deprecated and for removal.
- [extractor-options] Mark as deprecated and for removal.
- [subtitles] Add SRT subtitle builder.
- [subtitles] Work on the JS+CSS subtitle builder.
- [third_party/uare] Improve the extractor and add proxying support.
- [ytiapi] Added support for CONTENT_CHECK_REQUIRED.
- [ytiapi] Add support for more client types.
	Special thanks to https://github.com/zerodytrash/YouTube-Internal-Clients
- [related] Improve handling of view strings and video titles.
- [formats] Add isDefault flag.
- [abi] Add ABI 6070: Updated Video Metadata
- [metadata] Add updated video metadata extractor.
- [shorts] Add YouTube Shorts (Reel) extractor.
- [dfs] Improved decipherer support for v9.
- [dfs] Mark the Lua backend for removal. (potentially)
2.1.21 (Totally not 2.2-rc3 by the way)  =====================================
- [ytiapi] Added like extraction.
- [metadata] Allow dislikes to be non-existent.
	They were a threat to our democracy anyway.
- [metadata] Set default like and dislike count to -1.
- [general] Added heatmap support.
- [ytiapi] Added heatmap support.
- [ytapi-rolling, next-rolling] Update to ABI 2.2
- [flex] Begin implementation.
- [general] Fix chapters not working.
- [ytiapi] Fix likes failing on the WEB backend.
- [abi] Add ABI 6055: Content Start Time
- [abi] Add ABI 6060: Localized Video Text
- [gvi] Deprecate and mark for removal.
- [embed-next] Deprecate (in code) and mark for removal.
- [tests] Add new tests and improve testing suite.
2.1.20 (Totally not 2.2-rc2 by the way)  =====================================
- [dfs] Add a Lua-based backend.
- [dfs] Use the Lua-based backend if available.
- [dfs] Enable non-fallback deciphering.
- [api] Add new backend type: AGE_GATE
- [extractor-abi] Added flag system, currently used for detecting age-gate, livestream and livestream-chat support.
- [all] Added support for ABI 2.2 flags.
- [all?] Switched to using AGE_GATE instead of EMBEDDED.
- [ytiapi] Add support for age-restricted videos.
- [formats] Added itag 214, 216.
- [constants] Add SIGNATURE_TIMESTAMP to our extracted constants.
- [ytiapi] Use extracted SIGNATURE_TIMESTAMP.
- [search] Fix failures.
- [extractor-api] More prep. work for 2.2.
- [general] Bug fixes and performance tweaks.
2.1.19 (Totally not 2.2-rc1 by the way)  =====================================
- [extractors] Removed the legacy extractors.
	RIP YTE 2.0 extractors (2020-2021)
	You'll be missed, thanks for all the fun.
- [formats] Added itag 139. (48kbps AAC)
- [formats] Re-enabled FLV and 3GPP based formats.
	Well since Android, iOS AND MWEB has them, lol why not.
- [formats] Added HDR variants of AV1.
- [ecd] Fixed codec detection failing due to a mistake in the detection code.
- [related] Removed legacy parser.
- [subtitles] Added support for various subtitle versions.
	You should use getSubtitlesF(String,FMTVersion) instead.
- [subtitles] Seperated parsers into their own classes.
- [subtitles] Added support for the SRV3 format.
- [related] Added support for the Android version of the API.
- [ytiapi] Added support for ABI 5500, 6000 and 6010.
- [ytiapi] Defaulted to ANDROID to fix DFS. (for now)
- [ytiapi] Enabled ECD by default.
- [comments] Added support for ANDROID comments, sort of.
- [general] Fixed complaining about `views` being type UNKNOWN by the formatter.
2.1.18 ==============================================================================
- [embed-rolling] Removed due to the removal of the API.
- [ytiapi-rolling] Added extractor for the youtubei API.
- [embed-next] Deprecated the extractor.
	Planned Removal: >=2.2.10
- [dfs] Reverted the YTAPI as default extractor change, ytiapi will become the default in the future.
- [ytiapi-rolling,nfee-rolling,ytapi-rolling] Increased the pre-allocation on the video list.
- [general] Increased pre-allocation sizes on lists to improve performance and latency on various APIs.
- [all] Fixed requiresSupplimentaryVideoAudio not being set on adaptive formats.
- [comments] Fixed failures due to API change.
- [comments] Removed mobile API and enabled YTAPI by default.
	The legacy standard API is present but marked for future removal.
- [extractor-api] Begun work on ABI 2.2
	Affects: All extractors.
- [extractor-abi] Added v5.5 and v6 feature set.
- [extractor-abi] Updated some extractors to fulfill v5.
- [nfee-rolling] Updated to 1.0.13.
2.1.17 ==============================================================================
- [dfs] Switched to YTAPI as the default extractor.
  This change will be reverted when baseJS is capable of solving cipher v9.
  RIP NFEE [for now] :(
- [dfs] Implemented 50% of the fix, some videos may still have issues.
- [comments] Fixed extraction.
- [gvi,embed-next] Switched to emulating an ANDROID client.
- Added the following extraction options:
	- SEND_X_GOOG_API_KEY
	- SEND_OAUTH_KEY
2.1.16 ==============================================================================
- Added support for multi-track audio.
- [dfs] Introduced the slow download speed fixup.
  - Also known as Cipher 9.0
  - Currently only 33% implemented as the rest requires work to baseJS.
- [testing] Added a unified test suite.
- [nfee-rolling,nfee] Improved ytInitialData parsing.
- [nfee-rolling,ytapi-rolling] Added support for livestream storyboards.
- [nfee-rolling] Removed ENABLE_DASH_MODE.
- [nfee-rolling] Add MPEG-DASH streaming support.
- [nfee] Removed ENABLE_VIDEO_QUEUE_WAIT.
- [related] Improved ytInitialData parsing.
- [channels] Fixed topic/music channels.
- [nfee,nfee-rolling,nfee-mt,ytapi] Fixed comment token extraction.
- [comments] Added extra error detection code to avoid invalid requests.
- [metadata] Added isDVRStream().
- [metadata] Deprecated isDashStreamMode().
	 * This will be removed in 2.3.
- [formats] Added more DRM formats.
	 Also, why is VP9 via MP4 a thing?
- [gvi,embed-next] Fixed extraction.
- [gvi,embed-next] Fixed extraction, again.
2.1.15 ==============================================================================
- Added extraction option ENABLE_UPCOMING_FEATURES.
	 Currently this will enable ECD, which is planned for 2.2.
- [SubtitleParser] Add support for pen IDs within the subtitle object.
- [SubtitleParser] Updated to version 1.0.3.
- [WebVTTBuilder] Fixed opacity values being enclosed in brackets.
- [WebVTTBuilder] Fixed opacity values being treated as integers.
- [Search] Added support for possibly upcoming changes.
- [Comments] Fixed like counts.
	 WARNING: Like counts above 10k will be approximated.
- [Comments] Added getReplyCount() to API.
- [YouTubeMetadata] Added getEnhancedDescription() to API.
2.1.14 ==============================================================================
- Added a storyboard parser.
- [nfee-rolling] Added support for modern content trailers.
- [nfee-rolling,ytapi-rolling] Updated some list management code.
- Added ABI(5005): INLINE_VIDEO_THUMBNAILS_V2
- Added an extraction option: SPOOF_INCLUDE_VERIFIED
  	No, this doesn't bypass the AVMSD age verification, tl;dr fuck the EU :^)
- Added an extraction option: DISABLE_SEND_CONSENT_COOKIE
	YTE doesn't seem to be affected by this change but for safety sakes, we will support it.
 	Extractors will automatically send this cookie unless opted-out of.
 	EDIT: Turns out that enabling redirections saved us from disaster
 	WARNING: This option is needed with the options: (for now)
 		- SEND_FAKE_COOKIE_DATA
 		- ENFORCE_PRIVACY_MODE
- Fixed chapters.
- Added unified chapter logic.
2.1.13 ==============================================================================
WARNING: A future ABI change is planned:
	Affects: all Extractors (ETA: 2.2)
	Change: YTE will use allow values to be passed through as an extraction option.
		This allows YTE to be redirected through a proxy or Tor.
- Subtitles: Added formatting support.
- Subtitles: Improved performance.
- Subtitles: Fixed timings.
- Deprecated VARIANTS_CHECKSUM due to it being removed.
- [gvi,embed] Added caption support.
- Added option NO_FALLBACK.
- [NFEE-mt] Migrated to the Executable<?> API
- [NFEE-mt,NFEE-legacy,page-legacy] Fixed extraction.
- [NFEE-rolling] Added storyboard support.
- Comments: Fixed author likes.
- Comments: Added pinning support.
- Channel: Fixed multi-page loading. (applies to the modern extractor only)
- Channel: Fix the legacy extractor.
- Channel: Add support for the "youtubei"-based loading method.
- [invidious] Fixed extraction.
- Extractors: Added abiProvides.
- Decipherers: Fixed software decipherers failing.
2.1.12 ==============================================================================
- Comments: Added the desktop backend (FUCKING FINALLY AFTER 14 MONTHS, tl;dr check your data kids)
  This is still experimental and not enabled by default.
- Comments: Unlocked some internal arguments.
- General: Minor performance improvements.
- [ytapi+ytapi_rolling] Fixed failures.
- [ytapi+ytapi_rolling] Added support for ABI 5310. (CIPHER_DEFER)
- Added ABI 5310: CIPHER_DEFER.
- [all] Livestreams no longer display as 30p, 720fps
- Added more DRM-based video formats into the register.
- Switched some code to use HTTPS over HTTP.
- Removed relevant video from clarifications
2.1.11 ==============================================================================
- NFEE: Began work on v3 on the rolling branch
- Moved late extraction (ABI 5100) back into a opt-in state.
- YouTubeNextFEE: Synced with rolling branch. (1.0.7-1 -> 1.0.10-1) [END OF NFEEv2]
- YouTubeEmbedNext: Updated versions. (1.0.1-1 -> 1.0.2)
- Added argument to enable constant value generation.
- Constants: Updated PAGE_STS.
- Enabled usage of the async submission (and batching) API.
- NFEE-rolling,NFEE,NFEE-MT: Moved from the ThreadDispatcher API to the ExecutorManager API.
- NFEE-rolling: Enabled async submission on DECIPHERER_GET+FORMAT+DECIPHER operations.
- NFEE-rolling,NFEE: Put decipherer recycling behind argument again.
- SignatureExtractor: Exposed ENABLE_EXTRACTOR_RECYCLE.
- YouTubeExtractor: Enabled fast mode on EXTRACTORS map.
- YouTubeMetadata: Implemented isLiveStream()
2.1.10 ==============================================================================
- Added DEBUG_PRINT_ERRORS as an option.
- Added support for movie previews/trailers from YouTube Movies.
- Related: Added support for movie renderers.
- Formats: Added support for EAC3, AC3 (Dolby Digital and Plus Variants) and DCA.
- Formats: Added support for DRM protected media. (lol brb pirating it)
- Added DRM Metadata support to rolling extractors.
- Formats: Fixed audio always falling back to hard-coded data.
  Bitrates however will always fallback.
- Format: Removed is10bit.
  This has been replaced with isHDR.
- Added ABI 5300: DRM Metadata.
2.1.9 ===============================================================================
- YouTubeNextFEE: Synced with rolling branch. (1.0.3-5 -> 1.0.7-1)
- YouTubeAPI: Synced with rolling branch. (0.1.1-3 -> 0.1.7)
- Deprecated more unused codecs. (planned removal: ~2.3)
- Made standard NextFEE the default extractor over the deprecated multi-threaded variant.
- Deprecated the NextFEE-multithreaded extractor. (planned removal: ~2.3)
- Moved signature extractor cache to seperate class.
- Related: Fixed animated thumbnail support.
- Silenced fallback results message.
- Channels: Fixed duration parsing.
- Channels: Added animated thumbnail support.
- Channels: Fixed titles not being parsed on rare ocasions.
- Channels: Fixed banners.
- Channels: Removed old <meta>-based parsing.
- Playlists: Added local index.
- SignatureExtractor: Added cached player_url reference.
- Added ABI 5010: Raw Storyboards
- Added ABI 5020: Thumbnail Support Levels
- Added ABI 5030: Raw Caption URLs
- Added ABI 5050: Custom Thumbnail URLs
- Added ABI 5200: Extended Codec Data (ECD)
- Subtitles: Fixed positional code.
- Subtitles: Updated positional logic.
- Search: Added option to skip text encoding.
2.1.8 ===============================================================================
- Removed ROLLING_ABI, STABLE_ABI.
 - These features are now present in every extractor.
- Mainlined the following functions: abiVersion(), isSupported(ABIFeatures)
- ABI(5000): Added experimental storyboard support.
- Endscreens: Added URL decoding to prevent any &[..]; being exposed.
- YouTubeMusic: Further extractor work.
- RelatedParser: Fixed falling back to secondary results.
- RelatedParser: Add primary result support.
- [ALL]: Fixed incorrect naming of extractors during failures.
- NFEE-rolling: Prep. work for new scraper.
- NFEE-rolling: Updated to 1.0.7-1.
- NFEE-[standard,mt]: Fixed JSON parsing issues.
- Formats: Added HDR support for JSON based generation.
- Formats: Added partial-HDR support for URL-query based generation.
- Prep. for partial URL-query deprecation.
- Formats: Moved is10bit to isHDR.
- SignatureExtractor: Fallback decipherer function names are now ASCII-only.
- SignatureExtractor: Invalid function names are now logged.
- Search: Fixed continuations failing.
- Search: Added APIv2 support.
2.1.7 ===============================================================================
 - Updated ROLLING_ABI to 4520. (was 4500)
 	- 4510: CHAPTER_SUPPORT
 	- 4520: SUPER_TAG_SUPPORT
 - Updated STABLE_ABI to 3500, was 3320.
 - Added chapter support.
 - Added super tag support.
 - Updated the NextFEERolling extractor to 1.0.7.
 - Updated the YouTubeAPIRolling extractor to 0.1.7.
 - Fixed PAGE defaulting to THIRD_PARTY extractors.
 - YouTubeNextFEEMT: Fixed setMap(result) not being called.
 - YouTubeNextFEEMT: Updated to 1.0.1-4.
 - YouTubeNextFEEMT: Fixed playlists.
 - TODO: Unifiy any possible methods.
2.1.6 ===============================================================================
 - Fix get(String)
 - Fixed captionArray-caused NullPointerException's.
 - Updated the NextFEERolling extractor to 1.0.6.
 - Updated the YouTubeAPIRolling extractor to 0.1.6.
 - Enabled usage of the ExecutorManager API over the ThreadDispatcher.
 - Removal of the JSoup library.
 - Updated [and fixed] the BitChute extractor.
 - Added the GVI extractor for now. (POSSIBLE_REMOVAL: 2.2)
 - Added the Invidious extractor. (experimental)
2.1.5 ===============================================================================
 - Added testing framework.
 - Added get(String/ExtractorType).
 - Added cached extractor interface with support for get().
 - Added experimental [opt-in] signature decipherer recycling.
 - Partial asObject() cleanup.
 - Fixes for 'signatureCipher' and undecoded \\u0026's.
 - Removed prevVideo feature as signature data is extractable from the home page.
 - Extended caching period for the decipherer to 60 minutes.
2.1.4-1 - Added support for both "cipher" and "signatureCipher" payloads.
2.1.4 - Rewritten Signature API and tweaks.
2.1.3 - Added Rolling extractors.
2.1.2 - Added Auto Formatter to fix FPS and quality mismatches between the cached formats.
		 - Preparations for the ECD update. (ECD -> Extended Codec Data)
2.1.1 - UniJson API updates.
2.1 - Code refactor, added NEXT and MT/NFEE (Multithreaded/NextFastExecutionExecutor) extractors.
	- Legacy extractors: Removed legacy decipherer code and patched with NFEE code.
2.0 - Code refactor and rewrite.
---- (YTE 2.0 and newer above) ----
1.4.4 - Add support for the new signature API.
1.4.1-1.4.3 - Patches.
1.4 - Improved speed.
1.3 - Improved extraction.
1.2 - Added Embed API.
1.1 - Fixes for YouTube update.
1.0 - Initial release.